home *** CD-ROM | disk | FTP | other *** search
- CHAPTER 2
-
- Programming Technical Reference - IBM
- Copyright 1988, Dave Williams
-
- CPU Port Assignments, System Memory Map, BIOS Data Area, Interrupts 00h to 09h
-
-
- SYSTEM MEMORY MAP - OVERALL
-
- The IBM PC handles its address space in 64k segments, divided into 16k
- fractions and then further as nescessary.
-
- start start end
- addr. addr. addr. usage
- (dec) (hex)
-
- 00000 **** 640k *************** system data, drivers....
- 0000:0000 hardware interrupt vectors
- 0000:0040 BIOS interrupt vectors
- 0k start of RAM | 0000:0080 DOS interrupt vector table
- 16k 00000-03FFF | 0000:0300 Stack area during POST and bootstrap routine
- 32k 04000-07FFF | 0000:0400 BIOS Data Area
- 48k 08000-0BFFF | 0000:04F0 Intra-Application Communications Area
- |
- 64k 10000-13FFF | 0000:0500 DOS reserved communication area
- 80k 14000-17FFF | xxxx:0000 IO.SYS - DOS interface to ROM I/O routines
- 96k 18000-1BFFF | xxxx:0000 MSDOS.SYS - DOS interrupt handlers, service
- 112k 1C000-1FFFF | routines (int 21 functions)
- |
- 128k 20000-23FFF | xxxx:xxxx DOS buffers, control areas, and installed
- 144k 24000-27FFF | device drivers.
- 160k 28000-2BFFF | xxxx:0000 resident portion of COMMAND.COM, interrupt
- 176k 2C000-2FFFF | handlers for int 22h, 23h,24h, and code to
- | reload the transient portion
- 192k 30000-33FFF | xxxx:0000 master environment block, default 64 bytes
- 208k 34000-37FFF | xxxx:0000 environment for next program
- 224k 38000-3BFFF | xxxx:0000 external commands or utilities (COM or EXE
- 240k 3C000-3FFFF | files)
- |
- 256k 40000-43FFF | ----:---- application programs
- 272k 44000-47FFF | xxxx:0000 user stack for COM files (256 bytes)
- 288k 48000-4BFFF | xxxx:0000 transient portion of COMMAND.COM
- 304k 4C000-4FFFF |
- |
- 320k 50000-53FFF |
- 336k 54000-57FFF |
- 352k 58000-5BFFF |
- 368k 5C000-5FFFF |
- |
- 384k 60000-63FFF |
- 400k 64000-67FFF |
- 416k 68000-6BFFF |
- 432k 6C000-6FFFF |
- |
- 448k 70000-73FFF |
- 464k 74000-77FFF |
- 480k 78000-7BFFF |
- 496k 7C000-7FFFF |
- |
- 512k 80000-83FFF |
- 528k 84000-87FFF |
- 544k 88000-8BFFF | original IBM PC-1 BIOS limited memory to 544k
- 560k 8C000-8FFFF |
- |
- 576k 90000-93FFF |
- 592k 94000-97FFF |
- 609k 98000-9BFFF |
- 624k 9C000-9FFFF | to 640k (top of RAM address space)
-
-
- A0000 ***** 64k *************** EGA address
- 640k A0000-A95B0 MCGA 320x200 256 color video buffer
- AF8C0 MCGA 640x480 2 color video buffer
- -A3FFF
- 656k A4000-A7FFF
- 672k A8000-ABFFF
- 688k AC000-AFFFF
-
-
- B0000 ***** 64k *************** mono and CGA address
- 704k B0000-B3FFF mono uses only 4k | The PCjr and early Tandy 1000
- 720k B4000-B7FFF | BIOSs revector direct writes to
- 736k B8000-BBFFF CGA uses entire 16k | the B8 area to the Video Gate
- 756k BC000-BFFFF | Array and reserved system RAM
-
-
- C0000 ***** 64k *************** expansion ROM
- 768k C0000-C3FFF 16k EGA BIOS C000:001E EGA BIOS signature (the letters IBM)
- 784k C4000-C5FFF
- C6000-C63FF 256 bytes Professional Graphics Display communication area
- C6400-C7FFF
- 800k C8000-CBFFF 16k hard disk controller BIOS, drive 0 default
- 816k CC000-CDFFF 8k IBM PC Network NETBIOS
- CE000-CFFFF
-
- D0000 ***** 64k *************** expansion ROM | PCjr first ROM cartridge
- 832k D0000-D7FFF 32k IBM Cluster Adapter | address area.
- DA000 voice communications |
- 848k D4000-D7FFF | Common expanded memory board
- 864k D8000-DBFFF | paging area.
- 880k DC000-DFFFF |
-
-
- E0000 ***** 64k *************** expansion ROM | PCjr second ROM
- 896k E0000-E3FFF | cartridge address
- 912k E4000-E7FFF | area
- 928k E8000-EBFFF |
- 944k EC000-EFFFF |
-
-
- F0000 ***** 64k *************** system | PCjr optional ROM
- 960k F0000-F3FFF reserved by IBM | cartridge address
- 976k F4000- | area (cartridge
- F6000 ROM BASIC Begins | BASIC)
- 992k F8000-FB000 |
- 1008k FC000-FFFFF ROM BASIC and original |
- BIOS (Compatibility BIOS |
- in PS/2) |
- 1024k FFFFF end of memory (1024k) for 8088 machines
- F000:FFF5 BIOS release date
- F000:FFFE PC model identification
-
- 384k 100000-15FFFF 80286/AT extended memory area, 1Mb motherboard
- 15Mb 100000-FFFFFF 80286/AT extended memory address space
-
- 15Mb 160000-FDFFFF Micro Channel RAM expansion (15Mb extended memory)
- 128k FE0000-FFFFFF system board ROM (PS/2 Advanced BIOS)
-
-
-
- PC Port Assignment, Intel 8088, 80C88, 8086, 80286, 80386 CPUs
-
- hex addr. Function
-
- 0000-000F 8237 DMA controller
- 0010-001F 8237 DMA controller (AT, PS/2)
- 0020-0027 8259A interrupt controller
- 0020-003F 8259A interrupt controller (AT)
- 0040-005F 8253-5 programmable timers
- (note: 0041 was memory refresh in PCs. Not used in PS/2)
- 0060-0067 8255 peripheral interface
- 0060-006F 8042 keyboard controller (AT)
- 0200-020F game-control adapter
- 0210-0217 expansion box (PC, XT)
- 0278-027F LPT3
- 02F8-02FF COM2
- 0300-031F prototype card
- 0320-032F hard disk controller
- 0378-037F LPT2
- 03BC-03BF LPT1
- 03D0-03DF CGA, MCGA, VGA adapter control
- 03F0-03F7 floppy disk controller
- 03F8-03FF COM1
-
- note: These are functions common across the IBM range. The PCjr, PC
- Convertible and PS/2 (both buses) have enhancements. In some cases, the
- AT and PS/2 series ignore, duplicate, or reassign ports arbitrarily. If
- your code incorporates specific port addresses for video or system board
- control it would be wise to have your application determine the machine
- type and video adapter and address the ports as required.
-
-
-
- Reserved Memory Locations in the IBM PC
-
- addr. size description
-
- 000h-3FFh DOS interrupt vector table
- 30:00h- used as a stack area during POST and bootstrap routines. This
- 3F:FFh stack area may be revectored by an application program.
- The BIOS Data Area addr. from 400h to 4FFh
- 40:00 word COM1 port address | These addresses are zeroed out in the
- 40:02 word COM2 port address | OS/2 DOS Compatibility Box if any of
- 40:04 word COM3 port address | the OS/2 COM??.SYS drivers are loaded.
- 40:06 word COM4 port address |
- 40:08 word LPT1 port address
- 40:0A word LPT2 port address
- 40:0C word LPT3 port address
- 40:0E word LPT4 port address (not valid in PS/2 machines)
- 40:0E word PS/2 pointer to 1k extended BIOS Data Area at top of RAM
- 40:10 word equipment flag (see int 11h)
- bits:
- 0 1 if floppy drive present (see bits 6&7) 0 if not
- 1 1 if 80x87 installed (not valid in PCjr)
- 2,3 system board RAM (not used on AT or PS/2)
- 00 16k
- 01 32k
- 10 48k
- 11 64k
- 4,5 initial video mode
- 00 no video adapter
- 01 40 column color (PCjr)
- 10 80 column color
- 11 MDA
- 6,7 number of diskette drives
- 00 1 drive
- 01 2 drives
- 10 3 drives
- 11 4 drives
- 8 0 DMA present
- 1 DMA not present (PCjr)
- 9,A,B number of RS232 serial ports
- C game adapter (joystick)
- 0 no game adapter
- 1 if game adapter
- D serial printer (PCjr only)
- 0 no printer
- 1 serial printer present
- E,F number of parallel printers installed
- note 1) The IBM PC and AT store the settings of the system board
- switches or CMOS RAM setup information (as obtained by the BIOS
- in the Power-On Self Test (POST)) at addresses 40:10h and
- 40:13h. 00000001b indicates "on", 00000000b is "off".
- 2) CMOS RAM map, PC/AT:
- offset contents
- 00h Seconds
- 01h Second Alarm
- 02h Minutes
- 03h Minute Alarm
- 04h Hours
- 05h Hour Alarm
- 06h Day of the Week
- 07h Day of the Month
- 08h Month
- 09h Year
- 0Ah Status Register A
- 0Bh Status Register B
- 0Ch Status Register C
- 0Dh Status Register D
- 0Eh Diagnostic Status Byte
- 0Fh Shutdown Status Byte
- 10h Disk Drive Type for Drives A: and B:
- The drive-type bytes use bits 0:3 for the first
- drive and 4:7 for the other
- Disk drive types:
- 00h no drive present
- 01h double sided 360k
- 02h high capacity (1.2 meg)
- 03h-0Fh reserved
- 11h (AT):Reserved (PS/2):drive type for hard disk C:
- 12h (PS/2):drive type for hard disk D:
- (AT, XT/286):hard disk type for drives C: and D:
- Format of drive-type entry for AT, XT/286:
- 0 number of cyls in drive (0-1023 allowed)
- 2 number of heads per drive (0-15 allowed)
- 3 starting reduced write compensation (not
- used on AT)
- 5 starting cylinder for write compensation
- 7 max. ECC data burst length, XT only
- 8 control byte
- Bit
- 7 disable disk-access retries
- 6 disable ECC retries
- 5-4 reserved, set to zero
- 3 more than 8 heads
- 2-0 drive option on XT (not used by AT)
- 9 timeout value for XT (not used by AT)
- 12 landing zone cylinder number
- 14 number of sectors per track (default 17,
- 0-17 allowed)
- 13h Reserved
- 14h Equipment Byte (corresponds to sw. 1 on PC and XT)
- 15h-16h Base Memory Size (low,high)
- 17h-18h Expansion Memory Size (low,high)
- 19h-20h Reserved
- (PS/2) POS information Model 50 (60 and 80 use a 2k
- CMOS RAM that is not accessible through software)
- 21h-2Dh Reserved (not checksumed)
- 2Eh-2Fh Checksum of Bytes 10 Through 20 (low,high)
- 30h-31h Exp. Memory Size as Det. by POST (low,high)
- 32h Date Century Byte
- 33h Information Flags (set during power-on)
- 34h-3Fh Reserved
- 3) The alarm function is used to drive the BIOS wait function (int
- 15h function 90h).
- 4) To access the configuration RAM write the byte address (00-3Fh)
- you need to access to I/O port 70h, then access the data via I/O
- port 71h.
- 5) CMOS RAM chip is a Motorola 146818
- 6) The equipment byte is used to determine the configuration for the
- power-on diagnostics.
- 7) Bytes 00-0Dh are defined by the chip for timing functions, bytes
- 0Eh-3Fh are defined by IBM.
- 40:12 byte number of errors detected by infrared keyboard link (PCjr only)
- 40:13 word availible memory size in Kbytes (less display RAM in PCjr)
- this is the value returned by int 12h
- 40:17 byte keyboard flag byte 0 (see int 9h)
- bit 7 insert mode on 3 alt pressed
- 6 capslock on 2 ctrl pressed
- 5 numlock on 1 left shift pressed
- 4 scrollock on 0 right shift pressed
- 40:18 byte keyboard flag byte 1 (see int 9h)
- bit 7 insert pressed 3 ctrl-numlock (pause) toggled
- 6 capslock pressed 2 PCjr keyboard click active
- 5 numlock pressed 1 PCjr ctrl-alt-capslock held
- 4 scrollock pressed 0
- 40:19 byte storage for alternate keypad entry (not normally used)
- 40:1A word pointer to keyboard buffer head character
- 40:1C word pointer to keyboard buffer tail character
- 40:1E 32bytes 16 2-byte entries for keyboard circular buffer, read by int 16h
- 40:3E byte drive seek status - if bit=0, next seek will recalibrate by
- repositioning to Track 0.
- bit 3 drive D bit 2 drive C
- 1 drive B 0 drive A
- 40:3F byte diskette motor status
- bit 7 1, write in progress 3 1, D: motor on (floppy 3)
- 6 2 1, C: motor on (floppy 2)
- 5 1 1, B: motor on
- 4 0 1, A: motor on
- 40:40 byte motor off counter
- starts at 37 and is decremented 1 by each system clock tick.
- motor is shut off when count = 0.
- 40:41 byte status of last diskette operation where:
- bit 7 timeout failure bit 3 DMA overrun
- 6 seek failure 2 sector not found
- 5 controller failure 1 address not found
- 4 CRC failure 0 bad command
- 40:42 7 bytes NEC status
- 40:49 byte current CRT mode (hex value)
- 00h 40x25 BW (CGA) 01h 40x25 color (CGA)
- 02h 80x25 BW (CGA) 03h 80x25 color (CGA)
- 04h 320x200 color (CGA) 05h 320x200 BW (CGA)
- 06h 640x200 BW (CGA) 07h monochrome (MDA)
- extended video modes (EGA/MCGA/VGA or other)
- 08h lores,16 color 09h med res,16 color
- 0Ah hires,4 color 0Bh n/a
- 0Ch med res,16 color 0Dh hires,16 color
- 0Eh hires,4 color 0Fh hires,64 color
- 40:4A word number of columns on screen, coded as hex number of columns
- 20 col = 14h (video mode 8, low resolution 160x200 CGA graphics)
- 40 col = 28h
- 80 col = 46h
- 40:4C word screen buffer length in bytes
- (number of bytes used per screen page, varies with video mode)
- 40:4E word current screen buffer starting offset (active page)
- 40:50 8 words cursor position pages 1-8
- the first byte of each word gives the column (0-19, 39, or 79)
- the second byte gives the row (0-24)
- 40:60 byte end line for cursor (normally 1)
- 40:61 byte start line for cursor (normally 0)
- 40:62 byte current video page being displayed (0-7)
- 40:63 word base port address of 6845 CRT controller or equivalent
- for active display 3B4h=mono, 3D4h=color
- 40:65 byte current setting of the CRT mode register
- 40:66 byte current palette mask setting (CGA)
- 40:67 5 bytes temporary storage for SS:SP during shutdown (cassette interface)
- 40:6C word timer counter low word
- 40:6E word timer counter high word
- 40:69 byte HD_INSTALL (Columbia PCs) (not valid on most clone computers)
- bit 0 = 0 8 inch external floppy drives
- 1 5-1/4 external floppy drives
- 1,2 = highest drive address which int 13 will accept
- (since the floppy drives are assigned 0-3, subtract
- 3 to obtain the number of hard disks installed)
-
- 4,5 = # of hard disks connected to expansion controller
- 6,7 = # of hard disks on motherboard controller
- (if bit 6 or 7 = 1, no A: floppy is present and
- the maximum number of floppies from int 11 is 3)
- 40:70 byte 24 hour timer overflow 1 if timer went past midnight
- it is reset to 0 each time it is read by int 1Ah
- 40:71 byte BIOS break flag (bit 7 = 1 means break key hit)
- 40:72 word reset flag (1234 = soft reset, memory check will be bypassed)
- PCjr keeps 1234h here for softboot when a cartridge is installed
- 40:74 byte status of last hard disk operation; PCjr special diskette control
- 40:75 byte # of hard disks attached (0-2) ; PCjr special diskette control
- 40:76 byte hd control byte; temporary holding area for 6th param table entry
- 40:77 byte port offset to current hd adapter ; PCjr special diskette control
- 40:78 4 bytes timeout value for LPT1,LPT2,LPT3,LPT4
- 40:7C 4 bytes timeout value for COM1,COM2,COM3,COM4 (0-FFh seconds, default 1)
- 40:80 word pointer to start of circular keyboard buffer, default 03:1E
- 40:82 word pointer to end of circular keyboard buffer, default 03:3E
- 40:84 byte rows on the screen (EGA only)
- 40:84 byte PCjr interrupt flag; timer channel 0 (used by POST)
- 40:85 word bytes per character (EGA only)
- 40:85 2 bytes (PCjr only) typamatic char to repeat
- 40:86 2 bytes (PCjr only) typamatic initial delay
- 40:87 byte mode options (EGA only)
- Bit 1 0 = EGA is connected to a color display
- 1 = EGA is monochrome.
- Bit 3 0 = EGA is the active display,
- 1 = "other" display is active.
- Mode combinations:
- Bit3 Bit1 Meaning
- 0 0 EGA is active display and is color
- 0 1 EGA is active display and is monochrome
- 1 0 EGA is not active, a mono card is active
- 1 1 EGA is not active, a CGA is active
- 40:87 byte (PCjr only) current Fn key code
- 40:88 byte feature bit switches (EGA only) 0=on, 1=off
- bit 3 = switch 4
- bit 2 = switch 3
- bit 1 = switch 2
- bit 0 = switch 1
- 40:88 byte (PCjr only) special keyboard status byte
- bit 7 function flag 3 typamatic (0=enable,1=disable)
- 6 Fn-B break 2 typamatic speed (0=slow,1=fast)
- 5 Fn pressed 1 extra delay bef.typamatic (0=enable)
- 4 Fn lock 0 write char, typamatic delay elapsed
- 40:89 byte PCjr, current value of 6845 reg 2 (horiz.synch) used by
- ctrl-alt-cursor screen positioning routine in ROM
- 40:8A byte PCjrCRT/CPU Page Register Image, default 3Fh
- 40:8B byte last diskette data rate selected
- 40:8C byte hard disk status returned by controller
- 40:8D byte hard disk error returned by controller
- 40:8E byte hard disk interrupt (bit 7=working int)
- 40:90 4 bytes media state drive 0, 1, 2, 3
- 40:94 2 bytes track currently seeked to drive 0, 1
- 40:96 byte keyboard flag byte 3 (see int 9h)
- 40:97 byte keyboard flag byte 2 (see int 9h)
- 40:98 dword pointer to users wait flag
- 40:9C dword users timeout value in microseconds
- 40:A0 byte real time clock wait function in use
- 40:A1 byte LAN A DMA channel flags
- 40:A2 2 bytes status LAN A 0,1
- 40:A4 dword saved hard disk interrupt vector
- 40:A8 dword EGA pointer to parameter table
- 40:B4 byte keyboard NMI control flags (Convertible)
- 40:B5 dword keyboard break pending flags (Convertible)
- 40:B9 byte port 60 single byte queue (Convertible)
- 40:BA byte scan code of last key (Convertible)
- 40:BB byte pointer to NMI buffer head (Convertible)
- 40:BC byte pointer to NMI buffer tail (Convertible)
- 40:BD 16bytes NMI scan code buffer (Convertible)
- 40:CE word day counter (Convertible and after)
- to -04:8F end of BIOS Data Area
- 40:90-40:EF reserved by IBM
- 04:F0 16 bytes Intra-Application Communications Area (for use by applications
- 04:FF to transfer data or parameters to each other)
-
- 05:00 byte DOS print screen status flag
- 00h not active or successful completion
- 01h print screen in progress
- 0FFh error during print screen operation
- 05:01 Used by BASIC
- 05:02-03 PCjr POST and diagnostics work area
- 05:04 byte Single drive mode status byte
- 00 logical drive A
- 01 logical drive B
- 05:05-0E PCjr POST and diagnostics work area
- 05:0F BASIC: SHELL flag (set to 02h if there is a current SHELL)
- 05:10 word BASIC: segment address storage (set with DEF SEG)
- 05:12 4 bytes BASIC: int 1Ch clock interrupt vector segment:offset storage
- 05:16 4 bytes BASIC: int 23h ctrl-break interrupt segment:offset storage
- 05:1A 4 bytes BASIC: int 24h disk error interrupt vector segment:offset storage
- 05:1B-1F Used by BASIC for dynamic storage
- 05:20-21 Used by DOS for dynamic storage
- 05:22-2C Used by DOS for diskette parameter table. See int 1Eh for values
- 05:30-33 Used by MODE command
- 05:34-FF Unknown - Reserved for DOS
-
-
- At Absolute Addresses:
-
- 0008:0047 IO.SYS or IBMBIO.COM IRET instruction. This is the dummy routine that
- interrupts 01h, 03h, and 0Fh are initialized to during POST.
- C000:001E EGA BIOS signature (the letters IBM)
- F000:FFF5 BIOS release date
- F000:FFFE PC model identification
- date model byte submodel byte revision
- 04/24/81 FF = PC-0 (16k) -- --
- 10/19/81 FF = PC-1 (64k) -- --
- 08/16/82 FF = PC, XT, XT/370 -- --
- (256k motherboard)
- 10/27/82 FF = PC, XT, XT/370 -- --
- (256k motherboard)
- 11/08/82 FE = XT, Portable PC -- --
- XT/370, 3270PC
- 01/10/86 FB = XT 00 01
- 01/10/86 FB = XT-2 (early)
- 05/09/86 FB = XT-2 (640k) 00 02
- 06/01/83 FD = PCjr -- --
- 01/10/84 FC = AT -- --
- 06/10/85 FC = AT 00 01
- 11/15/85 FC = AT 01 00
- 04/21/86 FC = XT/286 02 00
- 09/13/85 F9 = Convertible 00 00
- 09/02/86 FA = PS/2 Model 30 00 00
- 11/15/86 FC = AT, Enhanced 8mHz
- 02/13/87 FC = PS/2 Model 50 04 00
- 02/13/87 FC = PS/2 Model 60 05 00
- 1987 F8 = PS/2 Model 80 00 00
- 2D = Compaq PC (4.77) -- --
- 9A = Compaq Plus (XT) -- --
-
- 00FC 7531/2 Industrial AT
- 06FC 7552 Gearbox
-
-
-
-
- The IBM PC System Interrupts (Overview)
-
- The interrupt table is stored in the very lowest location in memory, starting
- at 0000:0000h. The locations are offset from segment 0, ie location 0000h has
- the address for int 0, etc. Each address is four bytes long and its location in
- memory can be found by multiplying the interrupt number by 4. For example, int
- 7 could be found by (7x4=28) or 1Bh (0000:001Bh).
- These interrupt vectors normally point to ROM tables or are taken over by DOS
- when an application is run. Some applications revector these interrupts to
- their own code to change the way the system responds to the user.
-
- Interrupt Address Function
- Number (Hex)
- 0 00-03 CPU Divide by Zero
- 1 04-07 CPU Single Step
- 2 08-0B CPU Nonmaskable
- 3 0C-0F CPU Breakpoint
- 4 10-13 CPU Overflow
- 5 14-17 BIOS Print Screen
- 6 18-1B hdw Reserved
- 7 1C-1F hdw Reserved
- 8 20-23 hdw Time of Day
- 9 24-27 hdw Keyboard
- A 28-2B hdw Reserved
- B 2C-2F hdw Communications [8259]
- C 30-33 hdw Communications
- D 34-37 hdw Disk
- E 38-3B hdw Diskette
- F 3C-3F hdw Printer
- 10 40-43 BIOS Video
- 11 44-47 BIOS Equipment Check
- 12 48-4B BIOS Memory
- 13 4C-4F BIOS Diskette/Disk
- 14 50-53 BIOS Serial Communications
- 15 54-57 BIOS Cassette, System Services
- 16 58-5B BIOS Keyboard
- 17 5C-5F BIOS Parallel Printer
- 18 60-63 BIOS Resident BASIC
- 19 64-67 BIOS Bootstrap Loader
- 1A 68-6B BIOS Time of Day
- 1B 6C-6F BIOS Keyboard Break
- 1C 70-73 BIOS Timer Tick
- 1D 74-77 BIOS Video Initialization
- 1E 78-7B BIOS Diskette Parameters
- 1F 7C-7F BIOS Video Graphics Characters, second set
- 20 80-83 DOS General Program Termination
- 21 84-87 DOS DOS Services Function Request
- 22 88-8B DOS Called Program Termination Address
- 23 8C-8F DOS Control Break Termination Address
- 24 90-93 DOS Critical Error Handler
- 25 94-97 DOS Absolute Disk Read
- 26 98-9B DOS Absolute Disk Write
- 27 9C-9F DOS Terminate and Stay Resident
- 28-3F A0-FF DOS Reserved for DOS
- 40-43 100-115 BIOS Reserved for BIOS
- 44 116-119 BIOS First 128 Graphics Characters
- 45-47 120-131 BIOS Reserved for BIOS
- 48 132-135 BIOS PCjr Cordless Keyboard Translation
- 49 136-139 BIOS PCjr Non-Keyboard Scancode Translation Table
- 50-5F 140-17F BIOS Reserved for BIOS
- 60-67 180-19F Reserved for User Software Interrupts
- 68-7F 1A0-1FF Reserved by IBM
- 80-85 200-217 ROM BASIC
- 86-F0 218-3C3 Used by BASIC Interpreter When BASIC is Running
- F1-FF 3C4-3FF Reserved by IBM
-
-
- For consistency in this volume, all locations and offsets are in hexadecimal
- unless otherwise specified. All hex numbers are prefaced with a leading zero
- if they begin with an alphabetic character, and are terminated with a
- lowercase H (h). The formats vary according to common usage.
-
-
- The IBM-PC System Interrupts (in detail)
-
-
- Interrupt 00h Divide by Zero (processor error). Automatically called at end
- (0:0000h) of DIV or IDIV operation that results in error. Normally set by
- DOS to display an error message and abort the program.
-
-
- Interrupt 01h Single step - Taken after every instruction when CPU Trap Flag
- (0:0004h) indicates single-step mode (bit 8 of FLAGS is 1). This is what
- makes the T command of DEBUG work for single stepping. Is not
- generated after MOV to segment register or POP of segment
- register. (unless you have a very early 8088 with the microcode
- bug).
-
-
- Interrupt 02h Non-maskable interrupt - Vector not disabled via CLI. Used by
- (0:0008h) parity check routine in POST, 8087 coprocessor, PCjr infrared
- keyboard link.
-
-
- Interrupt 03h Breakpoint - Taken when CPU executes the 1-byte int 3 (0CCh).
- (0:000Ch) Generated by opcode 0CCh. Similar to 8080's RST instruction.
- Generally used to set breakpoints for DEBUG.
-
-
- Interrupt 04h Divide overflow - Generated by INTO instruction if OF flag is
- (0:0010h) set. If flag is not set, INTO is effectively a NOP. Used to trap
- any arithmetic errors when program is ready to handle them rather
- than immediately when they occur.
-
-
- Interrupt 05h Print Screen - service dumps the screen to the printer. Invoked
- (0:0014h) by int 9 for shifted key 55 (PrtSc). Automatically called by
- keyboard scan when PrtSc key is pressed. Normally executes
- routine to print the screen, but may call any routine that can
- safely be executed from inside the keyboard scanner. Status and
- result byte are at address 0050:0000.
- entry AH 05h
- return absolute address 50:0
- 00h print screen has not been called, or upon return from a call
- there were no errors.
- 01h print screen is already in progress.
- 0FFh error encountered during printing.
- note 1) Uses BIOS services to read the screen
- 2) Output is directed to LPT1
- 3) Revectored into GRAPHICS.COM if GRAPHICS.COM is loaded
-
-
- Interrupt 06h Reserved by IBM
- (0:0018h)
-
-
- Interrupt 07h Reserved by IBM
- (0:00C0h)
-
-
- Interrupt 08h Timer - 55ms timer "tick" taken 18.2 times per second. Updates
- (0:0020h) (IRQ0) BIOS clock and turns off diskette drive motors after 2
- seconds of inactivity.
- entry AH 08h
- return absolute addresses:
- 40:6C number of interrupts since power on (4 bytes)
- 40:70 number of days since power on (1 byte)
- 40:67 day counter on all products after AT
- 40:40 motor control count - gets decremented and shuts off diskette
- motor if zero
- note Int 1Ch invoked as a user interrupt.
-
-
- Interrupt 09h Keyboard - taken whenever a key is pressed or released.
- (0:0024h) (IRQ1) Stores characters/scan-codes in status at [0040:0017,18]
- entry AH 09h
- return at absolute memory addresses:
- 40:17 bit
- 0 right shift key depressed
- 1 left shift key depressed
- 2 control key depressed
- 3 alt key depressed
- 4 ScrollLock state has been toggled
- 5 NumLock state has been toggled
- 6 CapsLock state has been toggled
- 7 insert state is active
- 40:18 bit
- 0 left control key depressed
- 1 left alt key depressed
- 2 SysReq key depressed
- 3 Pause key has been toggled
- 4 ScrollLock key is depressed
- 5 NumLock key is depressed
- 6 CapsLock key is depressed
- 7 Insert key is depressed
- 40:96 bit
- 0 last code was the E1h hidden code
- 1 last code was the E0h hidden code
- 2 right control key down
- 3 right alt key down
- 4 101 key Enhanced keyboard installed
- 5 force NumLock if rd ID & kbx
- 6 last character was first ID character
- 7 doing a read ID (must be bit 0)
- 40:97 bit
- 0 ScrollLock indicator
- 1 NumLock indicator
- 2 CapsLock indicator
- 3 circus system indicator
- 4 ACK received
- 5 resend received flag
- 6 mode indicator update
- 7 keyboard transmit error flag
- 40:1E keyboard buffer (20h bytes)
- 40:1C buffer tail pointer
- 40:72 1234h if ctrl-alt-del pressed on keyboard
- AL scan code
- note 1) Int 05h invoked if PrtSc key pressed
- 2) Int 1Bh invoked if Ctrl-Break key sequence pressed
- 3) Int 15h, AH=85h invoked on AT and after if SysReq key is pressed
- 4) Int 15h, AH=4Fh invoked on machines after AT
-
-
- Interrupt 0Ah EGA Vertical Retrace
- (0:0028h) (IRQ2) used by EGA vertical retrace, hard disk
-
-
- Interrupt 0Bh Communications Controller (serial port) hdw. entry
- (0:002Ch) (IRQ3) Serial Port 2 (com2)
- note IRQ 3 may be used by SDLC (synchronous data-link control) or
- bisynchronous communications cards instead of a serial port.
-
-
- Interrupt 0Ch Communications Controller (serial port) hdw. entry
- (0:0030h) (IRQ4) Serial Port 1 (com1)
- note IRQ 4 may be used by SDLC (synchronous data-link control) or
- bisynchronous communications cards instead of a serial port.
-
-
- Interrupt 0Dh Alternate Printer, PC/AT 80287
- (0:0034h) (IRQ5) used by hard disk, 60 Hz RAM refresh, LPT2 on AT, XT/286,
- and PS/2, dummy CRT vertical retrace on PCjr
-
-
- Interrupt 0Eh Diskette - indicates that a seek is in progress
- (0:0038h) (IRQ6) (sets bit 8 of 40:3E)
-
-
- Interrupt 0Fh Reserved by IBM
- (0:003Ch) (IRQ7) IRQ7 used by PPI interrupt (LPT1, LPT2)
-
-